package com.glela.statistics.service;

import java.util.List;
import java.util.Map;

import com.glela.statistics.model.UserEarnings;

/**
 * 用户收益
 * 
 * @author gwq
 * 
 */
public interface UserEarningsService {

	/**
	 * 【累计收益】：累计历史所有订单收益和手工调整收益，=已到账收益+待收收益+手工调整收益
	 * 
	 * @param useID  用户ID
	 * @return Long 收益值
	 * @author gaoweiqi
	 */
	public Long AccumulatedEarnings(Long useID);
	

	/**
	 * 【今日收益】：付款时间在今天0点到当前时间的所有订单（包含买卖两种）佣金总和{今日未到账(付款是在今日)}
	 * ,付款时间在今天0点到当前时间的所有订单（包含买卖两种）佣金总和
	 * @param useID  用户ID
	 * @return Long 收益值
	 * @author gaoweiqi
	 */
	public Long TodayEarnings(Long useID);
	

	/**
	 * 【 待收收益】：累计历史所有订单（买卖两种）未到帐收益总和{所有未到账的 只涉及订单}
	 * 
	 * @param useID 用户ID
	 * @return Long 收益值
	 * @author gaoweiqi
	 */
	public Long UncollectedEarnings(Long useID);

	/**
	 * 【本月收益】：累计付款时间在当前自然月内所有（买卖两种）订单收益，包含当前自然月内已到账收益和待收收益{本月未到账+本月实际收入流水(正负做抵消)}
	 * 
	 * @param useID  用户ID
	 * @return Long 收益值
	 * @author gaoweiqi
	 */
	public Long MonthEarnings(Long useID);

	/**
	 * 【 本月销售额】：累计当前自然月所有已支付订单（买卖两种）支付金额总和（实付款+余额）{已orderinfo分组 要加上运费}
	 * 
	 * @param useID   用户ID
	 * @return Long 收益值
	 * @author gaoweiqi
	 */
	public Long MonthSalesVolume(Long useID);
	/**
	 * 通过缓存获取收益
	 * 
	 * @param useID  用户ID
	 * @return UserEarnings 收益明细
	 * @author gaoweiqi
	 */
	UserEarnings selectEarningsWithCache(Long userID);
//	void CalculateEarningsAfterSale(Long orderDetailID,Long orderObjID);
	
	/**
	 * 计算收益(支付单接口)
	 * 
	 * @param userCommisionMap  收益明细
	 * @param openStoreUserId  店主ID
	 * @param totalFee  销售额
	 * @param payTime  订单支付时间
	 * @author gaoweiqi
	 */
	public void CalculateEarningsOrderWithCache(Map<Long, Integer> userCommisionMap,
			Long openStoreUserId, int totalFee, String payTime);
	/**
	 * 计算收益(售后单接口)
	 *
	 * @param userCommisionMap  收益明细
	 * @param openStoreUserId  店主ID
	 * @param totalFee  销售额
	 * @param payTime  订单支付时间
	 * @author gaoweiqi
	 */
	public void CalculateEarningsAfterSaleWithCache(Map<Long, Integer> userCommisionMap,
			Long openStoreUserId, int totalFee, String payTime);
}